package com.hyy.common.utils;

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

import java.io.UnsupportedEncodingException;
import java.util.Optional;

public class Mail {

//    @Autowired 没办法注入，因为是工具类，也没有加启动类 无法扫描到

    // 邮件发送器，由Spring自动配置
    private JavaMailSender javaMailSender;
    // 邮件配置信息，读取application.yml中的spring.mail配置
    private MailProperties mailProperties;

    // 构造方法注入邮件发送器和配置信息
    public Mail(JavaMailSender mailSender, MailProperties mailProperties) {
        this.javaMailSender = mailSender;
        this.mailProperties = mailProperties;
    }

    /**
     * 发送邮件
     * @param to 收件人邮箱
     * @param subject 邮件主题
     * @param content 邮件内容（支持HTML）
     */
    public void send(String to, String subject, String content) throws MessagingException, UnsupportedEncodingException {
        // 创建MIME邮件对象
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        // 创建邮件助手，false表示不带附件
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, false);

        // 获取发件人显示名称，优先取yml中的personal属性，否则用邮箱账号
        String personal = Optional.ofNullable(mailProperties.getProperties().get("personal"))
                .orElse(mailProperties.getUsername());//从邮件配置信息获取用户名（在yml中mail.propreties设置）

        // 设置发件人、收件人、主题、内容
        helper.setFrom(mailProperties.getUsername(),personal);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true); // true表示支持HTML

        // 发送邮件
        javaMailSender.send(mimeMessage);
    }
}
